/*
 * @Author: lsmi
 * @Date: 2021-11-04 21:24:03
 * @LastEditors: lsmi
 * @LastEditTime: 2021-11-18 21:26:18
 * @FilePath: \base-typescript\src\zip.ts
 */
// 给原型添加方法 
// 用type会报错
// type Array<T> = {
//   zip<U>(list: U[]): [T, U][]
// }
// 声明的interface Array<T>是对全局命名空间Array的增强  影响整个TypeScript项目  即便没有导入这个文件index2.ts  在TypeScript来说 [].zip方法也可以用
// 但是为了增强Array.prototype, 我们要确保用到zip方法的文件都已经加载了zip.ts文件  这样才能保证使用zip方法有效
interface Array<T>{
  zip<U>(list: U[]): [T, U][]
}
Array.prototype.zip = function<T, U>(this: T[], list: U[]): [T, U][]{
  return this.map((v, k) => tuple(v, list[k]))
}
// 如何才能保证使用zip方法的文件已经加载了zip.ts文件呢? 编辑tsconfig.json  把zip.js排除在项目外 这样使用方就必须先使用import语句将其导入
// "exclude": ["./src/zip.ts"] 或 *exclude*: ["./src/zip.ts"]